package org.plex.model;

import java.util.Date;
import java.util.List;
import java.util.Set;



public interface Principal {

   public static final int VISIBLITY_INVISIBLE=0;
   public static final int VISIBLITY_SEARCHES=1;
   public static final int VISIBLITY_GUI=2;
   
   public static String STATUS_CURRENT="CURRENT";
   public static String STATS_OBSOLETE="OBSOLETE";
   public static String PRINCIPALTYPE_GROUP="GROUP";
   public static String PRINCIPALTYPE_SERVICE="SERVICE";
   public static String PRINCIPALTYPE_SPECIAL="SPECIAL";
   public static String PRINCIPALTYPE_SYSTEM="SYSTEM";
   public static String PRINCIPALTYPE_USER="USER";
   //is not in LC
   public static String PRICIPALTYPE_ROLE="ROLE";
   public static String PRICIPALTYPE_LINK="LINK";
   public static String PRICIPALTYPE_RESOURE="RESOURE";
   
   void setEmailAliases(List emailList);
   
   String getDescription();
   
   Date getTimestampCreated();
   
   Date getTimestampUpdated();
   
   void setDescription(String description);
   
   String getCanonicalName();
   
   String getCommonName();
 
   String getDomainName();
   
   String getDomainCommonName();
   String getOid();
   String getStatus();
   String getEmail();
   String getOrg();
   void setCommonName(String commonName);
   void setStatus(String status);
   void setDomainName(String domainName);
   void setCanonicalName(String canonicalName);
   
   void setOid(String oid);
   void setPrincipalType(String type);
   void setEmail(String email);
   void setOrg(String org);
   List getEmailAlias();
   Set getGroupMenberships();
   Set getDirectGroupmenberships();
   Set getRoleMenbership();
   int getVisibility();
   boolean isSystem();
   void clearEmailAlias();
   void addEmailAlias(String email);
   boolean isLocal();
   String gerPrincipalType();
   void setVisibility(int isVisibility);
   void setIsSystem(boolean isSystem);
   void setLocked(boolean islocked);
   boolean isLocked();
}
